package com.lollipop.common.utils;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Slf4j
public class CookieUtil {

	public final static String COOKIE_DOMAIN = "localhost";
	public final static String COOKIE_NAME = "vt";

	public static String getCookie(HttpServletRequest request, String COOKIE_NAME) {
		Cookie[] cks = request.getCookies();
		if (cks != null) {
			for (Cookie ck : cks) {
				log.info("read cookieName:{},cookieValue:{}", ck.getName(), ck.getValue());
				if (StringUtils.equals(ck.getName(), COOKIE_NAME)) {
					log.info("return cookieName:{},cookieValue:{}", ck.getName(), ck.getValue());
					return ck.getValue();
				}
			}
		}
		return null;
	}

	// X:domain=".happymmall.com"
	// a:A.happymmall.com cookie:domain=A.happymmall.com;path="/"
	// b:B.happymmall.com cookie:domain=B.happymmall.com;path="/"
	// c:A.happymmall.com/test/cc cookie:domain=A.happymmall.com;path="/test/cc"
	// d:A.happymmall.com/test/dd cookie:domain=A.happymmall.com;path="/test/dd"
	// e:A.happymmall.com/test cookie:domain=A.happymmall.com;path="/test"

	public static void addToken(HttpServletResponse response, String COOKIE_NAME, String token) {
		Cookie ck = new Cookie(COOKIE_NAME, token);
		ck.setDomain(COOKIE_DOMAIN);
		ck.setPath("/");// 代表设置在根目录
		//ck.setHttpOnly(true);
		// 单位是秒。
		// 如果这个maxage不设置的话，cookie就不会写入硬盘，而是写在内存。只在当前页面有效。
		ck.setMaxAge(60 * 60 * 24 * 365);// 如果是-1，代表永久
		log.info("write cookieName:{},cookieValue:{}", ck.getName(), ck.getValue());
		response.addCookie(ck);
	}

	public static void delLoginToken(HttpServletRequest request, HttpServletResponse response) {
		Cookie[] cks = request.getCookies();
		if (cks != null) {
			for (Cookie ck : cks) {
				if (StringUtils.equals(ck.getName(), COOKIE_NAME)) {
					ck.setDomain(COOKIE_DOMAIN);
					ck.setPath("/");
					ck.setMaxAge(0);// 设置成0，代表删除此cookie。
					log.info("del cookieName:{},cookieValue:{}", ck.getName(), ck.getValue());
					response.addCookie(ck);
					return;
				}
			}
		}
	}

}
